﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
	<title>设计模式</title>
</head>
<body>
	<a href="#hh2"><div style="border: 1px solid; width: 40px;margin-left: 80%;margin-top:50%;position: fixed;">
		<b>返回顶部</b>
	</div></a>
    <h2 id="hh2">设计原则</h2>
<pre>
  使用设计模式的根本原因是适应变化，提高代码复用率，使软件更具有可维护性和可扩展性。并且，在进行设计的时候，
  也需要遵循以下几个原则：<a href="#a">单一职责原则</a>、<a href="#b">开闭原则</a>、<a href="#c">里氏替换原则</a>、<a href="#d">依赖倒置原则</a>、<a href="#e">接口隔离原则</a>、<a href="#f">合成复用原则</a>、<a href="#g">迪米特法则</a>
  下面就分别介绍每种设计原则。
</pre>
    <div>
        <h3 id="a">单一职责原则</h3>
<pre>
  说明：
  就一个类而言，应该只有一个引起它变化的原因。如果一个类承担的职责过多，就等于把这些职责耦合在一起，一个职责的变化可能会影响到其他的职责，另外
  把多个职责耦合在一起，也会影响复用性。
  理解：
  一个类就管一种事情
</pre>
    </div>
    <div>
        <h3 id="b">开闭原则</h3>
<pre>
  说明：
  开闭原则即OCP（Open-Closed Principle缩写）原则，该原则强调的是：一个软件实体（指的类、函数、模块等）应该对扩展开放，对修改关闭。
  即每次发生变化时，要通过添加新的代码来增强现有类型的行为，而不是修改原有的代码。
  符合开闭原则的最好方式是提供一个固有的接口，然后让所有可能发生变化的类实现该接口，让固定的接口与相关对象进行交互。
  理解：
  少改写好的代码
</pre>
    </div>
    <div>
        <h3 id="c">里氏替换原则</h3>
<pre>
  说明：
  Liskov Substitution Principle,LSP（里氏代替原则）指的是子类必须替换掉它们的父类型。
  也就是说，在软件开发过程中，子类替换父类后，程序的行为是一样的。
  只有当子类替换掉父类后，此时软件的功能不受影响时，父类才能真正地被复用，而子类也可以在父类的基础上添加新的行为。
  理解：
  父类要保证通用性
</pre>
    </div>
    <div>
        <h3 id="d">依赖倒置原则</h3>
<pre>
  说明：
  依赖倒置（Dependence Inversion Principle, DIP）原则指的是抽象不应该依赖于细节，细节应该依赖于抽象，
  也就是提出的 “面向接口编程，而不是面向实现编程”。这样可以降低客户与具体实现的耦合。
  理解：
  方法出一个接口，接口具体实现的方法单说
</pre>
    </div>
    <div>
        <h3 id="e">接口隔离原则</h3>
<pre>
  说明：
  接口隔离原则（Interface Segregation Principle, ISP）指的是使用多个专门的接口比使用单一的总接口要好。
  也就是说不要让一个单一的接口承担过多的职责，而应把每个职责分离到多个专门的接口中，进行接口分离。过于臃肿的接口是对接口的一种污染。
  理解：
  跟单一职责相似，一个接口就管一种事
</pre>
    </div>
    <div>
        <h3 id="f">合成复用原则</h3>
<pre>
  说明：
  合成复用原则（Composite Reuse Principle, CRP）就是在一个新的对象里面使用一些已有的对象，使之成为新对象的一部分。
  新对象通过向这些对象的委派达到复用已用功能的目的。简单地说，就是要尽量使用合成/聚合，尽量不要使用继承。
  要使用好合成复用原则，首先需要区分”Has—A”和“Is—A”的关系。
  “Is—A”是指一个类是另一个类的“一种”，是属于的关系。
  “Has—A”则不同，它表示某一个角色具有某一项责任。
  理解：
  如果你确定两件对象之间是is-a的关系，那么此时你应该使用继承；比如菱形、圆形和方形都是形状的一种，那么他们都应该从形状类继承而不是聚合。
  如果你确定两件对象之间是has-a的关系，那么此时你应该使用聚合；比如电脑是由显示器、CPU、硬盘等组成的，
  那么你应该把显示器、CPU、硬盘这些类聚合成电脑类，而不是从电脑类继承。
  就是拼方法实现
</pre>
    </div>
    <div>
        <h3 id="g">迪米特法则</h3>
<pre>
  迪米特法则（Law of Demeter，LoD）又叫最少知识原则（Least Knowledge Principle，LKP），指的是一个对象应当对其他对象有尽可能少的了解。
  也就是说，一个模块或对象应尽量少的与其他实体之间发生相互作用，使得系统功能模块相对独立，这样当一个模块修改时，影响的模块就会越少，扩展起来更加容易。
  关于迪米特法则其他的一些表述有：只与你直接的朋友们通信；不要跟“陌生人”说话。
</pre>
    </div>

    <h2>设计模式列表</h2>
    <ul>
        <li><a href="创建性模式.html">创建性</a></li>
        <li><a href="结构型模式.html">结构型</a></li>
        <li><a href="行为型模式.html">行为型</a></li>
    </ul>
</body>
</html>